/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package appalquilerinmuebles;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import sun.security.x509.AVA;



public class controlAviso {

    private ArrayList<Aviso> LstAvisos;



    public  controlAviso(){
        LstAvisos = new ArrayList<Aviso>();

    }

    public void iniciaArregloPrueba (){

        String [] tipousuario = {"Vendedor", "Cliente", "Administrador", "Cliente", "Vendedor", "Vendedor", "Cliente", "Administrador", "Cliente", "Vendedor"};
        String [] tipoinmueble = {"Departamento", "Local", "Casa", "Casa de playa", "Duplex", "Departamento", "Local", "Casa", "Casa de playa", "Duplex"};
        String [] tipodistrito = {"San Borja", "La Victoria", "Chorrillos", "Villa Maria", "Ate", "San Borja", "La Victoria", "Chorrillos", "Villa Maria", "Ate"};

        for (int i=0; i<10; i++){
            String x = tipousuario[i];
            String y = tipoinmueble[i];
            String z = tipodistrito[i];
            String a = String.valueOf(i);
            Usuario usuario = new Usuario("usuario"+a,"12345", "usuario"+a+"@mail.com", "Juan"+a, x);
            Inmueble inmueble = new Inmueble("I00"+a, "Aqui describo", y, z, "Av. A 234", 1200.00, true);
            Aviso aviso = new Aviso("A00"+a, inmueble, usuario.getLogin(), "16/06/2011 12:00", "16/07/2011 12:00", 120000+i, "Buen inmueble");
            LstAvisos.add(aviso);
        }
    }


    private Calendar convertirAFecha(String fechaHora){
        // dd-MM-yyyy HH:mm
        // 0123456789012345
        Calendar fecha = Calendar.getInstance();
        fecha.set(Calendar.YEAR, Integer.parseInt(fechaHora.substring(6, 10)));
        fecha.set(Calendar.MONTH, Integer.parseInt(fechaHora.substring(3, 5)));
        fecha.set(Calendar.DAY_OF_MONTH, Integer.parseInt(fechaHora.substring(0, 2)));
        fecha.set(Calendar.HOUR_OF_DAY, Integer.parseInt(fechaHora.substring(11, 13)));
        fecha.set(Calendar.MINUTE, Integer.parseInt(fechaHora.substring(14, 16)));
        fecha.set(Calendar.SECOND, 0);
        return fecha;
    }

    /* Cantidad de Avisos
     * Creador : LSalvatierra       Fecha: 16/06/2011
     * Modificado:                  Fecha
     */
    public int CantidadAvisos(){
        return LstAvisos.size();
    }

    /* Historia: Registrar Aviso
     * Creador : LSalvatierra       Fecha: 16/06/2011
     * Modificado:                  Fecha
     */
    public boolean  RegistrarAviso(String codigo, Inmueble inmueble, String usuario,
        String fechaInicio, String fechaFin, double precio, String descripcion){
        boolean rpta =false;
        if(ValidarFechas(fechaInicio, fechaFin)){
            LstAvisos.add(new Aviso(codigo, inmueble, usuario, fechaInicio,fechaFin,precio,descripcion));
            rpta = true;
        }
        return rpta;
    }
    /*
     * Registrar Aviso (sobrecarga: recivir variable de tipo Aviso)
     */
    void RegistrarAviso(Aviso aviso) {
        if(aviso!=null){
            LstAvisos.add(aviso);
        }
    }

    /* Validar Fechas
     * Creador : LSalvatierra       Fecha: 16/06/2011
     * Modificado:                  Fecha
     */
    public boolean ValidarFechas(String fechaIni, String fechaFin){
        Calendar fecIni = convertirAFecha(fechaIni);
        Calendar fecFin = convertirAFecha(fechaFin);
        if(fecIni.before(fecFin)){
        return true;
        }
        return false;
    }

    /* Historia: Buscar Aviso Por Codigo para Modificar Datos
     * Creador : LSalvatierra       Fecha: 16/06/2011
     * Modificado:                  Fecha
     */
    public Aviso BuscarAvisosporCodigoAviso(String Codigo){
        for(Aviso av : LstAvisos){
            if(av.getCodigo().equals(Codigo))
                return av;
        }
        return null;
    }

    /* Historia: Buscar Archivo para ver y aunmentar su numero de visita 
     * Creador : LSalvatierra       Fecha: 16/06/2011
     * Modificado:                  Fecha
     */
   public Aviso VerAvisosporCodigo(String Codigo){
       Aviso objAv =  BuscarAvisosporCodigoAviso(Codigo);
       if(objAv!=null){
            ActualizarCantidadVisitaAviso(objAv);
            return objAv;
       }
       return null;
    }

    /* Historia: Buscar Avisos por Criterios Basicos
     * Creador : LSalvatierra       Fecha: 16/06/2011
     * Modificado:                  Fecha
     */
    public ArrayList<Aviso> BusquedaSimpledeAvisos(String TipoOperacion, String TipoInmueble, String Ubicacion, double PrecIni, double PrecFin ){
        ArrayList<Aviso> lstInmueble = new ArrayList<Aviso>();
        if(!TipoOperacion.equals("") || !TipoInmueble.equals("") || !Ubicacion.equals("") || PrecIni>0){
            for(Aviso objAv : LstAvisos){
                 if(TipoOperacion.equals(objAv.getInmueble().getDescripcion()) ||
                         TipoInmueble.equals(objAv.getInmueble().getTipoInmueble()) ||
                         Ubicacion.equals(objAv.getInmueble().getDistrito())  ||
                         objAv.getPrecio() <= PrecIni){
                     lstInmueble.add(objAv);
                 }
            }
        }else{
            return LstAvisos;
        }
        return lstInmueble;
    }
    
    
    
    /* Historia: Buscar Avisos por Criterios Avanzados
     * Creador : LSalvatierra       Fecha: 16/06/2011
     * Modificado:                  Fecha
     */
    public ArrayList<Aviso> BusquedaAvanzadodeAvisos(int NroDormitorios, int  Antiguedad, int  AreaTotal, int NroSSHH, boolean NroEstac, String ServAdic){
        ArrayList<Aviso> lstInmueble = new ArrayList<Aviso>();
        if(NroDormitorios > 0 || Antiguedad > 0 || AreaTotal > 0 || NroSSHH > 0 || NroEstac || !ServAdic.equals("") ){
            for(Aviso objAv : LstAvisos){
                 if(Antiguedad == objAv.getInmueble().getAntiguedad() ||
                         ServAdic.equals(objAv.getInmueble().getDescripcion()) ||
                         NroDormitorios == objAv.getInmueble().getHabitaciones() ||
                         AreaTotal == objAv.getInmueble().getAreaConstruida() || 
                         NroSSHH == objAv.getInmueble().getBaños() ||
                         NroEstac == objAv.getInmueble().isCochera()){
                     lstInmueble.add(objAv);
                 }
            }
        }else{
            return LstAvisos;
        }
        return lstInmueble;

    }


    /* Historia: Ordenar Avisos por columna
     * Creador : LSalvatierra           Fecha: 16/06/2011
     * Modificado:                  Fecha
     */
    public ArrayList<Aviso> OrdenarListadeAvisos(ArrayList<Aviso> lstAvisoOrd){
        Collections.sort(lstAvisoOrd);
        return lstAvisoOrd;
    }

    /* Historia: Listar Avisos mas Visitados
     * Creador : PChanbi            Fecha: 16/06/2011
     * Modificado:                  Fecha
     */
    public ArrayList<Aviso> ListadoDeAvisosMasVisitados(ArrayList<Aviso> lstAvisoOrd){
        Collections.sort(lstAvisoOrd, new OrdenarAvisosxVisita());
        return lstAvisoOrd;
    }



    /**
     * @return the LstAvisos
     */
    public ArrayList<Aviso> getLstAvisos() {
        return LstAvisos;
    }

    /**
     * @param LstAvisos the LstAvisos to set
     */
    public void setLstAvisos(ArrayList<Aviso> LstAvisos) {
        this.LstAvisos = LstAvisos;
    }

    public boolean desactivarAviso(String codigo){
        Aviso aviso = ubicarAvisoXCodigo(codigo);
        aviso.setEstado(false);
        return aviso.isEstado();
    }

    public boolean activarAviso(String codigo){
        Aviso aviso = ubicarAvisoXCodigo(codigo);
        aviso.setEstado(true);
        return aviso.isEstado();
    }

    public boolean destacarAviso(String codigo){
        Aviso aviso = ubicarAvisoXCodigo(codigo);
        aviso.setDestacado(true);
        return aviso.isDestacado();
    }

    private Aviso ubicarAvisoXCodigo(String codigo) {

        for (Aviso uAviso : LstAvisos){
            if (uAviso.getCodigo().equals(codigo)){
                return uAviso;
            }
        }
        return null;

    }


   /*CONSULTAR CANTIDAD DE AVISOS ACTIVOS POR TIPO INMUEBLE
    * PADOLFO
    */
   public ArrayList<Aviso> BuscarAvisosInmueblesporTipo(String TipoInmueble){
    ArrayList<Aviso> lstAvisosxTipo = new ArrayList<Aviso>();
     for(Aviso av : LstAvisos){
         if (av.getInmueble().getTipoInmueble().equals(TipoInmueble)){
         lstAvisosxTipo.add(av);
         }
      }
      return lstAvisosxTipo;
    }


    /*
     *
     */
    public void ActualizarCantidadVisitaAviso(Aviso objAv){
        int nroVisita = objAv.getNroVisita();
        objAv.setNroVisita(nroVisita++);
    }



    public ArrayList<Aviso> listaAvisosxCodigoUsuario (String codigo){

        ArrayList<Aviso> AvisoUsuario = new ArrayList<Aviso>();
        for (Aviso uAviso : LstAvisos){
            if(uAviso.getCodusuario().equals(codigo)){
                AvisoUsuario.add(uAviso);
            }
        }
        return AvisoUsuario;
    }

    public ArrayList<Aviso> listaAvisosActivosxCodigoUsuario (String codigo){
        ArrayList<Aviso> AvisoUsuario = new ArrayList<Aviso>();
        for (Aviso uAviso : LstAvisos){
            if(uAviso.getCodusuario().equals(codigo)&& uAviso.isEstado()==true){
                AvisoUsuario.add(uAviso);
            }
        }
        return AvisoUsuario;
    }

    public ArrayList<Aviso> listaAvisosInactivosxCodigoUsuario (String codigo){
        ArrayList<Aviso> AvisoUsuario = new ArrayList<Aviso>();
        for (Aviso uAviso : LstAvisos){
            if(uAviso.getCodusuario().equals(codigo)&& uAviso.isEstado()==false){
                AvisoUsuario.add(uAviso);
            }
        }
        return AvisoUsuario;
    }



}

